package sifeap.pl.managedbean.usuarios;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import sifeap.bl.ejb.usuarios.UsuarioBLLocal;
import sifeap.entities.usuarios.PreguntaSeguridad;
import sifeap.entities.usuarios.Usuario;
import sifeap.pl.util.FacesUtils;

@ManagedBean(name="desbloquearUsuarioManagedBean")
@SessionScoped
public class DesbloquearUsuarioManagedBean {
	private Usuario usuario;
	
	private boolean mostrarPregunta;
	private boolean exitoso;
	
	private final String MENSAJES_BUNDLE = "sifeap.pl.bundles.mensajes";
	
	@EJB
	UsuarioBLLocal usuarioBL;

	@PostConstruct
	public void inicializar() {
		cargarDatosPredeterminados();
	}
	
	private void cargarDatosPredeterminados() {
		setUsuario(new Usuario());
		getUsuario().setPreguntasseguridad(new PreguntaSeguridad());
		setMostrarPregunta(false);
		setExitoso(false);
	}
	
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public boolean isMostrarPregunta() {
		return mostrarPregunta;
	}

	public void setMostrarPregunta(boolean mostrarPregunta) {
		this.mostrarPregunta = mostrarPregunta;
	}
	
	public boolean isExitoso() {
		return exitoso;
	}

	public void setExitoso(boolean exitoso) {
		this.exitoso = exitoso;
	}
	
	public void cerrar() {
		cargarDatosPredeterminados();
	}
	
	public void buscarUsuario() {
		try {
			if (!validarObligatorios(true)) {
				return;
			}
			
			Usuario usuarioConsultado = usuarioBL.buscar(getUsuario().getNombreUsuario());
			
			if (usuarioConsultado != null) {
				usuarioConsultado.setRespuestapregunta(null);
				setUsuario(usuarioConsultado);
				setMostrarPregunta(true);
			} else {
				setMostrarPregunta(false);
				FacesUtils.addWarnMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.desbloquearusuario.usuario.noexiste"), false);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public List<String> actualizarPregunta(String nombreUsuario) {
		cargarDatosPredeterminados();
		
		//Debe retornar una lista de String
        List<String> results = new ArrayList<String>();  
        return results;  
    }
	
	public void desbloquear() {
		setExitoso(false);
		try {
			if (!validarObligatorios(false)) {
				return;
			}
			
			Usuario usuarioConsultado = usuarioBL.buscar(getUsuario().getNombreUsuario());
			
			if (usuarioConsultado != null) {
				usuarioConsultado.setRespuestapregunta(getUsuario().getRespuestapregunta());
				setUsuario(usuarioConsultado);
				setMostrarPregunta(true);
				
				byte resultado = usuarioBL.habilitarUsuario(getUsuario());
				
				switch (resultado) {
					case 1:
						//Exitoso
						FacesUtils.removeSessionAttribute("intentos_" + getUsuario().getNombreUsuario()); //Ajusta los numeros de intento
						cargarDatosPredeterminados();
						setExitoso(true);
						FacesUtils.addInfoMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.desbloquearusuario.exito"), false);
						break;
					case 2:
						//Respuesta incorrecta
						cargarDatosPredeterminados();
						FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.desbloquearusuario.respuestaincorrecta"), false);
						break;
					default:
						break;
				}
				
			} else {
				setMostrarPregunta(false);
				FacesUtils.addWarnMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.desbloquearusuario.usuario.noexiste"), false);
			}
		} catch (Exception e) {
			try {
				FacesUtils.addWarnMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.desbloquearusuario.error"), false);
			} catch (Exception em) {}
			e.printStackTrace();
		}
	}
	
	private boolean validarObligatorios(boolean soloUsuario) {
		boolean resultado = true;
		
		//Valida el documento
		if (!(getUsuario().getNombreUsuario() != null && getUsuario().getNombreUsuario().trim().length() > 0)) {
			resultado = false;
			try {
				FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.desbloquearusuario.usuario.obligatorio"), false);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		if (soloUsuario) {
			return resultado;
		}
		
		if (!(getUsuario().getRespuestapregunta() != null && getUsuario().getRespuestapregunta().trim().length() > 0)) {
			resultado = false;
			try {
				FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.desbloquearusuario.respuesta.obligatorio"), false);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		return resultado;
	}	
}
